home *** CD-ROM | disk | FTP | other *** search
/ PC go! 2017 October / PCgo 10-2017 CD-ROM Germany.iso / nw.pak / Unnamed File 004939.txt < prev    next >
Encoding:
Text File  |  2015-07-29  |  1.9 KB  |  56 lines

  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4.  
  5. // Custom binding for the webViewRequest API.
  6.  
  7. var binding = require('binding').Binding.create('webViewRequest');
  8.  
  9. var declarativeWebRequestSchema =
  10.     requireNative('schema_registry').GetSchema('declarativeWebRequest');
  11. var utils = require('utils');
  12. var validate = require('schemaUtils').validate;
  13.  
  14. binding.registerCustomHook(function(api) {
  15.   var webViewRequest = api.compiledApi;
  16.  
  17.   // Returns the schema definition of type |typeId| defined in
  18.   // |declarativeWebRequestScheme.types|.
  19.   function getSchema(typeId) {
  20.     return utils.lookup(declarativeWebRequestSchema.types,
  21.                         'id',
  22.                         'declarativeWebRequest.' + typeId);
  23.   }
  24.  
  25.   // Helper function for the constructor of concrete datatypes of the
  26.   // declarative webRequest API.
  27.   // Makes sure that |this| contains the union of parameters and
  28.   // {'instanceType': 'declarativeWebRequest.' + typeId} and validates the
  29.   // generated union dictionary against the schema for |typeId|.
  30.   function setupInstance(instance, parameters, typeId) {
  31.     for (var key in parameters) {
  32.       if ($Object.hasOwnProperty(parameters, key)) {
  33.         instance[key] = parameters[key];
  34.       }
  35.     }
  36.  
  37.     instance.instanceType = 'declarativeWebRequest.' + typeId;
  38.     var schema = getSchema(typeId);
  39.     validate([instance], [schema]);
  40.   }
  41.  
  42.   // Setup all data types for the declarative webRequest API from the schema.
  43.   for (var i = 0; i < declarativeWebRequestSchema.types.length; ++i) {
  44.     var typeSchema = declarativeWebRequestSchema.types[i];
  45.     var typeId = typeSchema.id.replace('declarativeWebRequest.', '');
  46.     var action = function(typeId) {
  47.       return function(parameters) {
  48.         setupInstance(this, parameters, typeId);
  49.       };
  50.     }(typeId);
  51.     webViewRequest[typeId] = action;
  52.   }
  53. });
  54.  
  55. exports.binding = binding.generate();
  56.